#include <bits/stdc++.h>
#define int long long 
using namespace std;
const int maxn = 1005;
char arr[maxn][maxn];

int colrs[maxn][maxn];

bool num[maxn*maxn]; // 用来记录对应的颜色是否已经被记录过了
int col;

int nx[] = {0, 0, 1, -1};
int ny[] = {1, -1, 0, 0};

void dfs(int i, int j){
	if (arr[i][j]=='.' || colrs[i][j] != 0) {
		return;
	}
	// 进行标记
	colrs[i][j] = col;
	for (int k=0;k<4;k++) {
		int ni = i + nx[k];
		int nj = j + ny[k];
		dfs(ni, nj);
	}
}


void solve(){
	int n;
	cin >> n;
	for (int i=1;i<=n;i++) {
		for (int j=1;j<=n;j++) {
			cin >> arr[i][j];
		}
	}
	// 标记颜色
	for (int i=1;i<=n;i++) {
		for (int j=1;j<=n;j++) {
			if (arr[i][j] == '#' && colrs[i][j]==0) {
				// 是陆地且没有遍历过
				col++;
				dfs(i, j);
			}
		}
	}
	int ans = 0;
	for (int i=1;i<=n;i++) {
		for (int j=1;j<=n;j++) {
			if (arr[i][j]=='.') continue;
			bool flag = false;
			for (int k=0;k<4;k++) {
				int ni = i + nx[k];
				int nj = j + ny[k];
				if (arr[ni][nj] == '.') {
					flag = true;
					break;
				}
			}
			if (!flag) {
				// 不被淹没
				if (!num[colrs[i][j]]) {
					// 颜色没有被加上过
					ans++;
					num[colrs[i][j]] = true;
				}
			}
		}
	}
	cout << col-ans << '\n';
}


signed main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	solve();
	return 0;
}
